package net.j4love.spring.boot.config;

import net.j4love.spring.boot.config.xml.XmlConfBean;
import net.j4love.spring.boot.config.yaml.YamlPropertyConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ImportResource;

/**
 * @author He Peng
 * @create 2017-05-19 10:46
 * @update 2017-05-19 10:46
 * @see
 */

@ImportResource(locations = "classpath:applicationContext.xml")
@EnableConfigurationProperties({YamlPropertyConfig.class})
@ComponentScan(basePackages = "net.j4love.spring.boot.config")
@EnableAutoConfiguration
public class SpringBootApplication {


    public static void main(String[] args) {

        // 使用 YAML 文件 进行配置
        // 如果想要使用 yaml 文件进行配置,在 classpath 路径下必须有  SnakeYAML library .
        // <dependency>
        //    <groupId>org.yaml</groupId>
        //    <artifactId>snakeyaml</artifactId>
        //    <version>1.18</version>
        // </dependency>

        // 如果你使用了 spring-boot-starter 那么它会为你准备好 SnakeYAML library .

        // 注意当同时存在 application.properties 和 application.yaml 的时候两个文件都会被加载

        // spring boot 在当前运行主类的目录下的 /config 目录下寻找配置文件
        // spring boot 在当前运行主类的目录下寻找配置文件
        // spring boot 在 classpath 下的 /config 目录下寻配置文件
        // spring boot 在 classpath 下寻找配置文件

        ApplicationContext applicationContext = SpringApplication.run(SpringBootApplication.class, args);
        YamlPropertyConfig yamlConf = applicationContext.getBean(YamlPropertyConfig.class);

        System.err.println("yamlConf : " + yamlConf);
        System.err.println("val = " + yamlConf.val);

        XmlConfBean bean = applicationContext.getBean(XmlConfBean.class);
        System.out.println("XmlConfBean : " + bean);

    }
}
